home *** CD-ROM | disk | FTP | other *** search
Wrap
/************************************************************************************************/ /* */ /* Program Name: Stiletto */ /* */ /* File Name: DNHandlers.c */ /* */ /* © Apple Computer, Inc. 1991-1995 */ /* All Rights Reserved */ /* */ /* Revision History: */ /* */ /* Date Who Modification */ /* */ /* 1991-07-03 Chris Halim Original version */ /* 1995-06-26 Jaakko Railo Version 2.0 */ /* */ /************************************************************************************************/ /****************************************** DESCRIPTION ****************************************** *************************************************************************************************/ /******************************************** HEADERS *******************************************/ #include "Telephones.h" #include "Constants.h" #include "DNHandlers.h" #include "DNWindow.h" #include "LogWindow.h" #include "Utilities.h" /****************************************** DEFINITIONS *****************************************/ /****************************************** PROTOTYPES ******************************************/ void HandleDNForwardSetMsg (TELDNHandle dnHand, short mtype, short value, ConstStr255Param rmtDN, ConstStr255Param name, ConstStr255Param subaddr); void HandleDNDNDMsg (TELDNHandle dnHand, short mtype, short value, ConstStr255Param rmtDN, ConstStr255Param name, ConstStr255Param subaddr); void HandleDNVoiceMsg (TELDNHandle dnHand, short mtype, short value, ConstStr255Param rmtDN, ConstStr255Param name, ConstStr255Param subaddr); void HandleDNSelectedMsg (TELDNHandle dnHand, short mtype, short value, ConstStr255Param rmtDN, ConstStr255Param name, ConstStr255Param subaddr); void HandleDNOtherMsg (TELDNHandle dnHand, short mtype, short value, ConstStr255Param rmtDN, ConstStr255Param name, ConstStr255Param subaddr); /******************************************** GLOBALS *******************************************/ extern LogWindowPtr gLogWindow; extern TelephoneDNMsgUPP gDNMsgHandlerUPP; /************************************************************************************************/ /************************************************************************************************/ #pragma segment DNHandlers OSErr InstallDNHandler (TELDNHandle dnHand) { OSErr errCode; Boolean allDNs = false; errCode = TELDNMsgHand (dnHand, allDNs, telDNOtherMsg | telAllDNMsgs, gDNMsgHandlerUPP, SetCurrentA5()); if (errCode != noErr) PutCLine (gLogWindow, kErrorColor, "### TELDNMsgHand fails : %d", errCode); return (errCode); } pascal void AllDNMsgsHandler (TELDNHandle dnHand, long msg, short mtype, short value, ConstStr255Param rmtDN, ConstStr255Param name, ConstStr255Param subaddr, long ourA5) { #pragma unused (mtype, value, rmtDN, name, subaddr) long oldA5; char *msgString; oldA5 = SetA5 (ourA5); switch (msg) { case telDNForwardMsg : msgString = "telDNForwardMsg"; break; case telDNDNDMsg : msgString = "telDNDNDMsg"; break; case telDNVoiceMailMsg : msgString = "telDNVoiceMailMsg"; break; case telDNSelectedMsg : msgString = "telDNSelectedMsg"; break; case telDNOtherMsg : msgString = "telDNOtherMsg"; break; default : PutCLine (gLogWindow, kErrorColor, "### Unknown dnMsg : %08x", msg); msgString = "### Unknown"; } PutLine (gLogWindow, ">>> got a DN message (%08x) : %s", dnHand, msgString); (void) SetA5 (oldA5); } pascal void DNMsgHandler (TELDNHandle dnHand, long msg, short mtype, short value, ConstStr255Param rmtDN, ConstStr255Param name, ConstStr255Param subaddr, long ourA5) { #pragma unused (dnHand) long oldA5; oldA5 = SetA5 (ourA5); switch (msg) { case telDNForwardMsg : HandleDNForwardSetMsg (dnHand, mtype, value, rmtDN, name, subaddr); break; case telDNDNDMsg : HandleDNDNDMsg (dnHand, mtype, value, rmtDN, name, subaddr); break; case telDNVoiceMailMsg : HandleDNVoiceMsg (dnHand, mtype, value, rmtDN, name, subaddr); break; case telDNSelectedMsg : HandleDNSelectedMsg (dnHand, mtype, value, rmtDN, name, subaddr); break; case telDNOtherMsg : HandleDNOtherMsg (dnHand, mtype, value, rmtDN, name, subaddr); break; default : PutCLine (gLogWindow, kErrorColor, "### Unknown dnMsg : %08x", msg); } (void) SetA5 (oldA5); } void HandleDNForwardSetMsg (TELDNHandle dnHand, short mtype, short value, ConstStr255Param rmtDN, ConstStr255Param name, ConstStr255Param subaddr) { char *typeStr, *valueStr; DNWindowPtr dnWindow; Str255 tString1, tString2, tString3; switch (mtype) { case telForwardImmediate : typeStr = "telForwardImmediate"; break; case telForwardBusy : typeStr = "telForwardBusy"; break; case telForwardNoAnswer : typeStr = "telForwardNoAnswer"; break; case telForwardBusyNA : typeStr = "telForwardBusyNA"; break; case telForwardTypeUnknown : typeStr = "telForwardTypeUnknown"; break; default : typeStr = "### Unknown fwdType"; } switch (value) { case telForwardCleared : valueStr = "FowardClr"; break; case telForwardEst : valueStr = "telForwardEst"; break; case telForwardFailed : valueStr = "telForwardFailed"; break; default : valueStr = "### Unknown fwdValue"; } PutCLine (gLogWindow, kDNMsgColor, "::: telDNForwardMsg (%08x) --> %s, %s", dnHand, valueStr, typeStr); PutLine (gLogWindow, " dest = %s, name = %s, subaddr = %s", ConvertToCString ((char *) tString1, (char *) rmtDN), ConvertToCString ((char *) tString2, (char *) name), ConvertToCString ((char *) tString3, (char *) subaddr)); if ((dnHand != nil) && ((value == telForwardCleared) || (value == telForwardEst))) { dnWindow = (DNWindowPtr) (*dnHand)->userData; SetCtlValue (dnWindow->fForward, (value == telForwardEst)); } } void HandleDNDNDMsg (TELDNHandle dnHand, short mtype, short value, ConstStr255Param rmtDN, ConstStr255Param name, ConstStr255Param subaddr) { #pragma unused (rmtDN, name, subaddr) char *typeStr, *valueStr; DNWindowPtr dnWindow; switch (mtype) { case telDNDIntExt : typeStr = "telDNDIntExt"; break; case telDNDExternal : typeStr = "telDNDExternal"; break; case telDNDInternal : typeStr = "telDNDInternal"; break; case telDNDNonIntercom : typeStr = "telDNDNonIntercom"; break; default : typeStr = "### Unknown dndType"; } switch (value) { case telDNDCleared : valueStr = "telDNDCleared"; break; case telDNDEst : valueStr = "telDNDEst"; break; case telDNDFailed : valueStr = "telDNDFailed"; break; default : valueStr = "### Unknown dndValue"; } PutCLine (gLogWindow, kDNMsgColor, "::: telDNDNDMsg (%08x) --> %s, %s", dnHand, valueStr, typeStr); if ((dnHand != nil) && ((value == telDNDCleared) || (value == telDNDEst))) { dnWindow = (DNWindowPtr) (*dnHand)->userData; SetCtlValue (dnWindow->fDND, (value == telDNDEst)); } } void HandleDNVoiceMsg (TELDNHandle dnHand, short mtype, short value, ConstStr255Param rmtDN, ConstStr255Param name, ConstStr255Param subaddr) { #pragma unused (mtype) char *valueStr; Str255 tString1, tString2, tString3; switch (value) { case telAllVoiceMessagesRead : valueStr = "telAllVoiceMessagesRead"; break; case telNewVoiceMessage : valueStr = "telNewVoiceMessage"; break; default : valueStr = "### Unknown dndValue"; } PutCLine (gLogWindow, kDNMsgColor, "::: telDNVoiceMailMsg (%08x) --> %s", dnHand, valueStr); PutLine (gLogWindow, " from = %s, name = %s, subaddr = %s", ConvertToCString ((char *) tString1, (char *) rmtDN), ConvertToCString ((char *) tString2, (char *) name), ConvertToCString ((char *) tString3, (char *) subaddr)); } void HandleDNSelectedMsg (TELDNHandle dnHand, short mtype, short value, ConstStr255Param rmtDN, ConstStr255Param name, ConstStr255Param subaddr) { #pragma unused (mtype, rmtDN, name, subaddr) char *valueStr; switch (value) { case telDNDeselected : valueStr = "telDNDeselected"; break; case telDNSelected : valueStr = "telDNSelected"; break; default : valueStr = "### Unknown dndValue"; } PutCLine (gLogWindow, kDNMsgColor, "::: telDNSelectedMsg (%08x) --> %s", dnHand, valueStr); } void HandleDNOtherMsg (TELDNHandle dnHand, short mtype, short value, ConstStr255Param rmtDN, ConstStr255Param name, ConstStr255Param subaddr) { Str255 tString1, tString2, tString3; PutCLine (gLogWindow, kDNMsgColor, "::: telDNOtherMsg (%08x) --> (vendor defined) type = %d, value = %d", dnHand, mtype, value); PutLine (gLogWindow, " rmtDN = %s, name = %s, subaddr = %s", ConvertToCString ((char *) tString1, (char *) rmtDN), ConvertToCString ((char *) tString2, (char *) name), ConvertToCString ((char *) tString3, (char *) subaddr)); } #pragma segment Dump void DumpDNInfo (TELDNHandle dnHand) { OSErr errCode; long flags; Str255 tString; if (dnHand != nil) { if ((errCode = TELGetDNInfo (dnHand)) == noErr) { PutLine (gLogWindow, "=============== TELDNRecord ==============="); PutLine (gLogWindow, " dnRef : %04x", (**dnHand).dnRef); PutLine (gLogWindow, " dn : %s", ConvertToCString ((char *) tString, (char *) (**dnHand).dn)); PutLine (gLogWindow, " dnPartyName : %s", ConvertToCString ((char *) tString, (char *) (**dnHand).dnPartyName)); PutLine (gLogWindow, " dnSubaddress : %s", ConvertToCString ((char *) tString, (char *) (**dnHand).dnSubaddress)); PutLine (gLogWindow, " hTEL : %08x", (**dnHand).hTEL); PutLine (gLogWindow, " maxAllocCA : %d", (**dnHand).maxAllocCA); PutLine (gLogWindow, " curAllocCA : %d", (**dnHand).curAllocCA); PutLine (gLogWindow, " dnType : %d", (**dnHand).dnType); flags = (**dnHand).featureFlags; PutLine (gLogWindow, " featureFlags : %08x", flags); PutLine (gLogWindow, " numPageIDs : %d", (**dnHand).numPageIDs); PutLine (gLogWindow, " numIntercomIDs : %d", (**dnHand).numIntercomIDs); PutLine (gLogWindow, " numPickupIDs : %d", (**dnHand).numPickupIDs); flags = (**dnHand).forwardFlags; PutLine (gLogWindow, " forwardFlags : %08x", flags); PutLine (gLogWindow, " iForwardDN : %s", ConvertToCString ((char *) tString, (char *) (**dnHand).iForwardDN)); PutLine (gLogWindow, " iForwardSubaddress : %s", ConvertToCString ((char *) tString, (char *) (**dnHand).iForwardSubaddress)); PutLine (gLogWindow, " iForwardPartyName : %s", ConvertToCString ((char *) tString, (char *) (**dnHand).iForwardPartyName)); PutLine (gLogWindow, " bForwardDN : %s", ConvertToCString ((char *) tString, (char *) (**dnHand).bForwardDN)); PutLine (gLogWindow, " bForwardSubaddress : %s", ConvertToCString ((char *) tString, (char *) (**dnHand).bForwardSubaddress)); PutLine (gLogWindow, " bForwardPartyName : %s", ConvertToCString ((char *) tString, (char *) (**dnHand).bForwardPartyName)); PutLine (gLogWindow, " naForwardDN : %s", ConvertToCString ((char *) tString, (char *) (**dnHand).naForwardDN)); PutLine (gLogWindow, " naForwardSubaddress : %s", ConvertToCString ((char *) tString, (char *) (**dnHand).naForwardSubaddress)); PutLine (gLogWindow, " naForwardPartyName : %s", ConvertToCString ((char *) tString, (char *) (**dnHand).naForwardPartyName)); PutLine (gLogWindow, " naForwardRings : %d", (**dnHand).naForwardRings); PutLine (gLogWindow, " telDNPrivate : %08x", (**dnHand).telDNPrivate); PutLine (gLogWindow, " refCon : %08x", (**dnHand).refCon); PutLine (gLogWindow, " userData : %08x", (**dnHand).userData); PutLine (gLogWindow, " reserved : %08x", (**dnHand).reserved); } else PutCLine (gLogWindow, kErrorColor, "### TELDNGetInfo fails : %d", errCode); } else PutCLine (gLogWindow, kErrorColor, "### Invalid dnHand"); } #pragma segment Dump void DumpDNFlags (TELDNHandle dnHand) { OSErr errCode; long dnFeatureFlags, dnFwdFlags; if (dnHand != nil) { if ((errCode = TELGetDNFlags (dnHand, &dnFeatureFlags, &dnFwdFlags)) == noErr) { PutLine (gLogWindow, "=============== dnFeatureFlags ==============="); PutLine (gLogWindow, " featureFlags : %08x", dnFeatureFlags); PutLine (gLogWindow, " %c dndSub", (dnFeatureFlags & dndSub)?checkChar:spaceChar); PutLine (gLogWindow, " %c dndAvail", (dnFeatureFlags & dndAvail)?checkChar:spaceChar); PutLine (gLogWindow, " %c dndActive", (dnFeatureFlags & dndActive)?checkChar:spaceChar); PutLine (gLogWindow, " %c voiceMailAccessSub", (dnFeatureFlags & voiceMailAccessSub)?checkChar:spaceChar); PutLine (gLogWindow, " %c voiceMailAccessAvail", (dnFeatureFlags & voiceMailAccessAvail)?checkChar:spaceChar); PutLine (gLogWindow, " %c voiceMailAccessActive", (dnFeatureFlags & voiceMailAccessActive)?checkChar:spaceChar); PutLine (gLogWindow, " %c pagingSub", (dnFeatureFlags & pagingSub)?checkChar:spaceChar); PutLine (gLogWindow, " %c pagingAvail", (dnFeatureFlags & pagingAvail)?checkChar:spaceChar); PutLine (gLogWindow, " %c pagingActive", (dnFeatureFlags & pagingActive)?checkChar:spaceChar); PutLine (gLogWindow, " %c intercomSub", (dnFeatureFlags & intercomSub)?checkChar:spaceChar); PutLine (gLogWindow, " %c intercomAvail", (dnFeatureFlags & intercomAvail)?checkChar:spaceChar); PutLine (gLogWindow, " %c intercomActive", (dnFeatureFlags & intercomActive)?checkChar:spaceChar); PutLine (gLogWindow, " %c dnSelectSub", (dnFeatureFlags & dnSelectSub)?checkChar:spaceChar); PutLine (gLogWindow, " %c dnSelectAvail", (dnFeatureFlags & dnSelectAvail)?checkChar:spaceChar); PutLine (gLogWindow, " %c dnSelectActive", (dnFeatureFlags & dnSelectActive)?checkChar:spaceChar); PutLine (gLogWindow, " %c callPickupSub", (dnFeatureFlags & callPickupSub)?checkChar:spaceChar); PutLine (gLogWindow, " %c callPickupAvail", (dnFeatureFlags & callPickupAvail)?checkChar:spaceChar); PutLine (gLogWindow, " %c dnInUse", (dnFeatureFlags & dnInUse)?checkChar:spaceChar); PutLine (gLogWindow, " %c logicalDN", (dnFeatureFlags & logicalDN)?checkChar:spaceChar); PutLine (gLogWindow, " %c dnAccessible", (dnFeatureFlags & dnAccessible)?checkChar:spaceChar); PutLine (gLogWindow, " %c canInitiate", (dnFeatureFlags & canInitiate)?checkChar:spaceChar); PutLine (gLogWindow, " %c voiceMessageWaiting", (dnFeatureFlags & voiceMessageWaiting)?checkChar:spaceChar); PutLine (gLogWindow, " %c hasDNSoundStreams", (dnFeatureFlags & hasDNSoundStreams)?checkChar:spaceChar); PutLine (gLogWindow, " %c autoAnswerAvail", (dnFeatureFlags & autoAnswerAvail)?checkChar:spaceChar); PutLine (gLogWindow, " %c autoAnswerActive", (dnFeatureFlags & autoAnswerActive)?checkChar:spaceChar); PutLine (gLogWindow, " %c tollSaverAvail", (dnFeatureFlags & tollSaverAvail)?checkChar:spaceChar); PutLine (gLogWindow, " %c tollSaverActive", (dnFeatureFlags & tollSaverActive)?checkChar:spaceChar); PutLine (gLogWindow, " remainder : %08x", (dnFeatureFlags & (0xFFFFFFFF << 27))); PutLine (gLogWindow, "=============== dnForwardFlags ==============="); PutLine (gLogWindow, " ForwardFlags : %08x", dnFwdFlags); PutLine (gLogWindow, " %c immediateForwardSub", (dnFwdFlags & immediateForwardSub)?checkChar:spaceChar); PutLine (gLogWindow, " %c immediateForwardAvail", (dnFwdFlags & immediateForwardAvail)?checkChar:spaceChar); PutLine (gLogWindow, " %c immediateForwardActive", (dnFwdFlags & immediateForwardActive)?checkChar:spaceChar); PutLine (gLogWindow, " %c busyForwardSub", (dnFwdFlags & busyForwardSub)?checkChar:spaceChar); PutLine (gLogWindow, " %c busyForwardAvail", (dnFwdFlags & busyForwardAvail)?checkChar:spaceChar); PutLine (gLogWindow, " %c busyForwardActive", (dnFwdFlags & busyForwardActive)?checkChar:spaceChar); PutLine (gLogWindow, " %c noAnswerForwardSub", (dnFwdFlags & noAnswerForwardSub)?checkChar:spaceChar); PutLine (gLogWindow, " %c noAnswerForwardAvail", (dnFwdFlags & noAnswerForwardAvail)?checkChar:spaceChar); PutLine (gLogWindow, " %c noAnswerForwardActive", (dnFwdFlags & noAnswerForwardActive)?checkChar:spaceChar); PutLine (gLogWindow, " %c busyNAForwardSub", (dnFwdFlags & busyNAForwardSub)?checkChar:spaceChar); PutLine (gLogWindow, " %c busyNAForwardAvail", (dnFwdFlags & busyNAForwardAvail)?checkChar:spaceChar); PutLine (gLogWindow, " %c busyNAForwardActive", (dnFwdFlags & busyNAForwardActive)?checkChar:spaceChar); PutLine (gLogWindow, " remainder : %08x", (dnFwdFlags & (0xFFFFFFFF << 12))); } else PutCLine (gLogWindow, kErrorColor, "### TELGetDNFlags fails : %d", errCode); } else PutCLine (gLogWindow, kErrorColor, "### Invalid dnHand"); } #pragma segment Dump void DumpDNEvents (TELDNHandle dnHand) { OSErr errCode; long eventMask; if (dnHand != nil) { if ((errCode = TELDNEventsSupp (dnHand, &eventMask)) == noErr) { PutLine (gLogWindow, "=============== DNEvents ==============="); PutLine (gLogWindow, " mask : %08x", eventMask); PutLine (gLogWindow, " %c telDNForwardMsg", (eventMask & telDNForwardMsg)?checkChar:spaceChar); PutLine (gLogWindow, " %c telDNDNDMsg", (eventMask & telDNDNDMsg)?checkChar:spaceChar); PutLine (gLogWindow, " %c telDNVoiceMailMsg", (eventMask & telDNVoiceMailMsg)?checkChar:spaceChar); PutLine (gLogWindow, " %c telDNSelectedMsg", (eventMask & telDNSelectedMsg)?checkChar:spaceChar); PutLine (gLogWindow, " %c telDNOtherMsg", (eventMask & telDNOtherMsg)?checkChar:spaceChar); PutLine (gLogWindow, " remainder : %08x", (eventMask & ~(telAllDNMsgs | telDNOtherMsg))); } else PutCLine (gLogWindow, kErrorColor, "### TELDNEventsSupp fails : %d", errCode); } else PutCLine (gLogWindow, kErrorColor, "### Invalid dnHand"); }